如何判断Android应用运行在鸿蒙系统上
/ 今日科技快讯 /
近日,埃隆·马斯克表示,太空探索技术公司SpaceX正在研发的星际飞船可以在太空中来回飞行,“粉碎掉太空垃圾”。星际飞船是SpaceX许多目标的核心装备,目前仍在开发中。马斯克希望最终用星际飞船把人送到月球和更远的深空。SpaceX已经对飞船原型进行了不少次测试。
/ 作者简介 /
本篇文章来自老司机椎锋陷陈的投稿,和大家分享了如何判断应用是否运行在鸿蒙系统上,相信会对大家有所帮助!同时也感谢作者贡献的精彩文章!
椎锋陷陈的博客地址:
https://blog.csdn.net/Alfred_C
/ 前言 /
不久前,HarmonyOS 2.0的正式发布,在华为用户及科技产品爱好者之间掀起了不小的波澜。其中,讨论关于HarmonyOS是如何兼容Android应用的话题最为频繁,从而引发了多方阵营关于「HarmonyOS究竟是否是套壳Android」的激烈争论。
与此同时,部分嗅到风向的开发者,已经在部署如何收集应用在HarmonyOS上的兼容情况了。这不,笔者所在的公司就安排我去进行相关的技术调研。其中,最重要的一点就是判断当前应用是否搭载在了HarmonyOS上,从而统计升级HarmonyOS的用户数量,作为后续公司战略方向可能调整的依据。
/ OpenHarmony与Harmony OS /
首先,让我们先为前面的争论下一个明确的定论,即:
HarmonyOS并非套壳Android。
我们通常意义上所讲的HarmonyOS,实际分成了两部分,一部分是 OpenHarmony,另一部分则是包括HMS在内的闭源应用与服务。
OpenHarmony是由开放原子开源基金会孵化及运营的开源项目,其性质与定位可参照Android开放源代码项目(AOSP) 。
而HarmonyOS 2.0则是华为基于OpenHarmony 2.0开发的面向多种全场景智能设备的商用版本。HarmonyOS 2.0遵循了AOSP的开源许可,从而实现了现有Android生态应用在部分搭载HarmonyOS 2.0的设备上的正常运行。
目前在HarmonyOS 2.0上存在两种类型的应用,即
纯HarmonyOS应用(指基于HarmonyOS开发的应用,不能安装在其他Android手机上,应用体积很小,但同时功能也很少)
支持HarmonyOS特性的应用(基于Android开发的应用,但是使用了 HarmonyOS的特性,通过工具导出时后缀仍然是APK)
Android系统配置介绍
adb命令行工具
adb shell getprop 可以查看手机上所有属性值。
abb shell getprop xxx 可以查看某个指定属性值。
SystemProperties类
* 获取鸿蒙系统版本号
*/
fun getHarmonyOsVersion(): String {
return if (isHuaweiBrand() && isHarmonyOs()) {
try {
val cls = Class.forName("android.os.SystemProperties")
val method = cls.getMethod("get", String::class.java)
method.invoke(cls, "ro.huawei.build.display.id") as String
} catch (e: Exception) {
"-1"
}
} else {
"-1"
}
}
* 获取鸿蒙系统版本号
*/
fun getHarmonyOsVersion(): String {
return if (isHuaweiBrand() && isHarmonyOs()) {
Build.DISPLAY
} else {
"-1"
}
}
private static String getString(String property) {
return SystemProperties.get(property, UNKNOWN);
}
public static String get(@NonNull String key, @Nullable String def) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get(key, def);
}
* 当前是否是鸿蒙系统
* 根据是否能调用Harmony JAVA API判断
*/
fun isHarmonyOs(): Boolean {
return try {
val cls = Class.forName("ohos.utils.system.SystemCapability")
cls != null
} catch (e: Exception) {
false
}
}